// Vue
import Vue, { h } from 'vue';
import App from './App';
// 混合
import mixinApp from '@/mixins/app';
// 插件
import plugins from '@/plugins';
// store
import store from '@/store/index';
// iView 和 iView Pro
import ViewUI from 'view-design';
import iViewPro from '@/libs/iview-pro/iview-pro.min.js';
// 菜单和路由
import router from './router';
// 多语言
import i18n from '@/i18n';
// 内置组件
import iLink from '@/components/link';
import iFrame from '@/components/frame';
// 使用样式，修改主题可以在 styles 目录下创建新的主题包并修改 iView 默认的 less 变量
// 参考 https://www.iviewui.com/docs/guide/theme
import './styles/index.less';
import './libs/iview-pro/iview-pro.css';
if (window) window.$t = (key, value) => i18n.t(key, value);
Vue.use(plugins);
Vue.use(ViewUI, {
    i18n: (key, value) => i18n.t(key, value)
});
Vue.use(iViewPro);
Vue.component('i-link', iLink);
Vue.component('i-frame', iFrame);

// -------------------------自定义区域-------------------------
// 公共组件
import Form from '@/components/modules/form/index.vue'
import iTable from '@/components/modules/table'
import itableForm from '@/components/modules/tableForm/index'
import iIconSelect from '@/components/iconSelect/icon-select.min.js';
// 自定义组件注册
Vue.component('i-table', iTable);
Vue.component('i-tableForm', itableForm)
Vue.component('i-form', Form)
Vue.use(iIconSelect);
// 扩展方法
import APIConfig from './api/controller/index'
import http from '@/api/http';
import printInfo from './nobug'
if (window.config.isMock) {
    import('@/api/mock/index.js').then(res => {
        res.InitMock()
    })
}
Vue.prototype.$Api = APIConfig;
Vue.prototype.$http = http;
new Vue({
    mixins: [mixinApp],
    router,
    store,
    i18n,
    render: h => h(App),
    created() {
        this.setCache(); // 初始化缓存，顶部导航以及侧面导航
        // 加载用户登录的数据
        this.$store.dispatch('admin/account/load'); // 初始化登录后加载框架初始化数据
        this.initApp(); // 初始化整体框架
        printInfo.printInfo()
    },
    watch: {
        // 监听路由 控制侧边栏显示 标记当前顶栏菜单（如需要）
        '$route'(to, from) {
            if (icu.storage.getData('menuSider')) {
                if (to.fullPath == '/root/home') {
                    return
                }
                this.setCache()
                this.initNavigation()
                this.appRouteChange(to, from);
            } else {
                if (!to.fullPath == '/login') {
                    this.$router.replace('/login');
                }
            }
        }
    }
}).$mount('#app');
